package com.dongjiantong.user.service;

import com.dongjiantong.mybatis.BaseService;
import com.dongjiantong.user.model.Farms;
import com.dongjiantong.user.model.dtos.FarmsDto;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * @author cao
 * @create 2017-11-15 下午3:05
 **/


public interface FarmsService extends BaseService<Farms> {


    /**
     * 查询所有类型的场
     *
     * @param pageNum
     * @param pageSize
     * @param farms
     * @return
     */
    PageInfo<Farms> getFarmsListByPage(Integer pageNum, Integer pageSize, Farms farms);


    /**
     * 养殖场信息
     *
     * @param id
     * @return
     */
    Farms getFarmsById(Long id);


    /**
     * 根据类型和名称搜索养殖场
     *
     * @param farmType
     * @param farmsName
     * @return
     */
    List<Farms> querySelectFarmList(Integer farmType, String farmsName);


    List<Farms> selectByFarmIds(List<Long> ids);

    /**
     * 根据用户id查询其管辖区域范围下的养殖场（只是规模场）
     *
     * @param userId
     * @return
     */
    List<Farms> selectByUserId(Long userId);

    /**
     * 根据用户id,条件分页查询养殖场(只是规模场)
     *
     * @param pageNum
     * @param pageSize
     * @param userId
     * @return
     */
    PageInfo<Farms> selectByUserId(Integer pageNum, Integer pageSize, Long userId);

    /**
     * 根据区域编号和当前登陆人查询其区域范围内的场
     *
     * @param provinceId
     * @param cityId
     * @param regionId
     * @param streetId
     * @param villageId
     */
    List<Farms> selectByArea(Long userId, Integer provinceId, Integer cityId, Integer regionId, Integer streetId, Integer villageId,Integer farmType);

    /**
     * 根据用户id,条件分页查场
     *
     * @param pageNum
     * @param pageSize
     * @param map
     * @return
     */
    PageInfo<Farms> selectByUserIdPage(Integer pageNum, Integer pageSize, Map map);

    /**
     * 根据政府端用户id,条件分页查场
     *
     *
     * @param map
     * @return
     */
    List<Farms> selectByMap(Map map);



    List<Farms> findFarmByAreaForV(Map<String, Object> map);

    Map<Integer,Integer> selectTotalQuantity(Long userId, List<Integer> farmTypes, List<Integer> animalTwoTypes, List<Integer> areaList);
    /**
     * 带存栏查询
     *
     * @param map
     * @return
     */
    List<FarmsDto> selectFarmStock(Map map);

    PageInfo<FarmsDto> selectFarmStock(Integer pageNum,Integer pageSize,Map map);

    PageInfo<String> selectFarmVillage(Integer pageNum, Integer pageSize,Map map);

    /**
     * 政府人员根据其管辖区域查询区域内已经养殖的畜种列表(二级畜种)
     * @param userId
     * @return 畜种code list
     */
    List<Integer> selectFarmBreedTypeByGovUserId(Long userId);

    /**
     * 牛档案政府端 -- 养殖场列表 (养牛的养殖场)
     */
    List<Farms> selectFarmListByAnimalType(Long userId, Integer breedSecondType);
}
